diff --git a/system/drivers/DB_driver.php b/system/drivers/DB_driver.php
index 2d1232d..b05cd7c 100644
--- a/system/drivers/DB_driver.php
+++ b/system/drivers/DB_driver.php
@@ -45,12 +45,15 @@
 	var $query_count	= 0;
 	var $bind_marker	= '?';
 	var $queries		= array();
-	
+	var $trans_enabled	= TRUE;
+	var $_trans_depth	= 0;
+	var $_trans_failure	= FALSE; // Used with transactions to determine if a rollback should occur
+
     // These are use with Oracle
     var $stmt_id;
     var $curs_id;
     var $limit_used;
-	
+
 	
 	/**
 	 * Constructor.  Accepts one parameter containing the database
@@ -186,11 +189,6 @@
 	 */	
     function query($sql, $binds = FALSE, $return_object = TRUE)
     {    
-		if ( ! $this->conn_id)
-		{
-			$this->initialize();
-		}
-
 		if ($sql == '')
 		{
             if ($this->db_debug)
@@ -207,15 +205,18 @@
 			$sql = $this->compile_binds($sql, $binds);
 		}
 
-		// Start the Query Timer
-        $time_start = list($sm, $ss) = explode(' ', microtime());
-        
         // Save the  query for debugging
         $this->queries[] = $sql;
-        
+
+		// Start the Query Timer
+        $time_start = list($sm, $ss) = explode(' ', microtime());
+      
 		// Run the Query
-        if (FALSE === ($this->result_id = $this->execute($sql, $this->conn_id)))
+        if (FALSE === ($this->result_id = $this->simple_query($sql)))
         { 
+        	// This will trigger a rollback if transactions are being used
+        	$this->_trans_failure = TRUE;
+        	
             if ($this->db_debug)
             {
 				log_message('error', 'Query error: '.$this->error_message());
@@ -274,6 +275,107 @@
 	// --------------------------------------------------------------------
 
 	/**
+	 * Simple Query  
+	 * This is a simiplified version of the query() function.  Internally
+	 * we only use it when running transaction commands since they do
+	 * not require all the features of the main query() function.
+	 * 
+	 * @access	public
+	 * @param	string	the sql query
+	 * @return	mixed		 
+	 */	
+	function simple_query($sql)
+	{
+		if ( ! $this->conn_id)
+		{
+			$this->initialize();
+		}
+
+		return $this->_execute($sql, $this->conn_id);
+	}
+	
+	// --------------------------------------------------------------------
+
+	/**
+	 * Disable Transactions
+	 * This permits transactions to be disabled at run-time.
+	 * 
+	 * @access	public
+	 * @return	void		 
+	 */	
+	function trans_off()
+	{
+		$this->trans_enabled = FALSE;
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Start Transaction
+	 * 
+	 * @access	public
+	 * @return	void		 
+	 */	
+	function trans_start()
+	{	
+		if ( ! $this->trans_enabled)
+		{
+			return FALSE;
+		}
+
+		// When transactions are nested we only begin/commit/rollback the outermost ones
+		if ($this->_trans_depth > 0)
+		{
+			$this->_trans_depth += 1;
+			return;
+		}
+		
+		// Reset the transaction failure flag
+		$this->_trans_failure = FALSE;		
+		$this->trans_begin();
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Complete Transaction
+	 * 
+	 * @access	public
+	 * @return	bool		 
+	 */	
+	function trans_complete()
+	{
+		if ( ! $this->trans_enabled)
+		{
+			return FALSE;
+		}
+	
+		// When transactions are nested we only begin/commit/rollback the outermost ones
+		if ($this->_trans_depth > 1)
+		{
+			$this->_trans_depth -= 1;
+			return TRUE;
+		}
+	
+		// The query() function will set this flag to TRUE in the event that a query failed
+		if ($this->_trans_failure === TRUE)
+		{
+			$this->trans_rollback();
+			
+			if ($this->db_debug)
+			{
+				return $this->display_error('db_transaction_failure');
+			}
+			return FALSE;			
+		}
+		
+		$this->trans_commit();
+		return TRUE;	
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
 	 * Enables a native PHP function to be run, using a platform agnostic wrapper.
 	 * 
 	 * @access	public
